草庐IT

GPU 加速

全部标签

windows - 从 GPU 获取完整的桌面截图

我一直在使用WindowsAPI的BitBlt函数来执行屏幕抓取。但是也有很多缺点:DWM和Aero导致速度大幅下降(3毫秒-->35毫秒只是为了调用BitBlt)——要解决这个问题需要禁用Aero,我宁愿不这样做。屏幕闪烁,事物四处移动。必须将数据重新传输到GPU才能将数据作为纹理加载如果没有CAPTUREBLT标志,则无法捕获分层窗口。启用后,鼠标光标会在捕获时闪烁。这可能看起来像是一个小问题,但是当应用程序没有其他错误时,它会非常烦人。作为解决方法,我打算将分层窗口渲染为附加光标。我已经在使用OpenGL来显示和操作捕获的屏幕数据。BitBlt给我像素数据,将它加载到纹理中相对容

c++ - 最佳 GPU 性能的理想位图大小?

我知道在处理显卡时,需要提供2的幂位图。1,2,4,8,16,32...我打算制作一个基于图block的项目,只有我需要知道向显卡提供巨大的位图是否有任何限制。使用小/大位图的优点/缺点是什么?我应该使用更合适的位图大小吗? 最佳答案 一般来说,在处理现代GPU时,数据量越大越好。你没有说你正在使用什么API(OpenGL、CUDA等),但你可以这样想:chunk_time=overhead_time+(num_of_elements/num_of_chunks)*per_element_timetotal_time=chunk_t

c++ - 是否有 SIMD 指令来加速校验和计算?

我将不得不编写一个非常基本的校验和函数,例如:charsum(constchar*data,constintlen){charsum(0);for(constchar*end=data+len;data这是微不足道的。现在,我应该如何优化它?首先,我可能应该使用一些std::for_each和lambda或类似的东西:charsum2(constchar*data,constintlen){charsum(0);std::for_each(data,data+len,[&sum](charb){sum+=b;});returnsum;}接下来,我可以使用多个线程/核心来汇总block,

c++ - 从gpu特征描述符转换的opencv特征描述符的问题

我在使用openvc将GPU特征描述符矩阵转换为CPU特征描述符矩阵时遇到了一些问题,使用:voiddownloadDescriptors(constGpuMat&descriptorsGPU,vector&descriptors);如您所见,此方法将包含描述符的GpuMat转换为包含描述符的浮点vector。问题是,当我访问此vector的某些元素时,返回的值与0的预期间隔完全不同。至255.我制作了以下测试程序来比较提取时间和通过SURF_GPU获得的描述和SURF:clock_tstart;clock_tend;SURF_GPUsurfGPU;SURFsurf;Matimg1=i

c++ - 在 Internet Explorer_Server (IWebBrowser2) 上拦截 WM_COMMAND(从加速器发送)

我需要拦截发送到我的CHtmlView对象的粘贴消息。根据Spy++,它作为WM_COMMAND消息发送-但也根据Spy++,该消息不是发送到CHtmlView对象,而是发送到它包装的InternetExplorer_Server(或IWebBrowser2)对象。有问题的WM_COMMAND消息在任何其他父对象中都看不到(我通过观察和Spy++发现了这一点)。我如何截取此(甚至是“全选”)消息?我查看了AfxCallWndProc以获取正确的WM_COMMAND消息,但它没有显示在那里。 最佳答案 要拦截一条消息(例如:WM_CO

c++ - 我有两个 GPU,我怎么能只让其中一个执行特定的 CUDA 任务呢?

刚接触CUDA,但有一些时间花在计算上,我家里有geforces,办公室有tesla(同代)。在家里,我在同一台计算机上安装了两个gpus,一个是GK110(计算能力3.5),另一个是GF110(计算能力2.0),我更喜欢使用GK110仅用于计算任务,GF110用于显示,除非我告诉它进行计算,有没有办法通过驱动程序设置来完成,或者我仍然需要重写我的一些代码?另外,如果我没理解错的话,如果GK110的显示端口没有连接,那么烦人的windows超时检测即使计算时间很长也不会尝试重置它?顺便说一句,我的CUDA代码是用compute_35和compute20编译的,因此代码可以在两个GPU上

c++ - 在 C++Amp 中减少 GPU-CPU 数据传输

我在尝试使用C++Amp优化我的应用程序时遇到了以下问题:数据传输。对我来说,将数据从CPU复制到GPU没有问题(因为我可以在应用程序的初始状态下执行此操作)。更糟糕的是,我需要快速访问C++Amp内核计算的结果,因此GPU和CPU之间的瓶颈很痛苦。我读到Windows8.1下的性能提升,但是我使用的是Windows7,我不打算更改它。我阅读了有关暂存阵列的信息,但我不知道它们如何帮助解决我的问题。我需要向主机返回一个浮点值,这似乎是最耗时的操作。floatSubset::reduction_cascade(unsignedelement_count,concurrency::arra

一文读懂「四大主流计算芯片 CPU、GPU、ASIC、FPGA」特点和场景

纵观人类历史,从结绳计数、木制计数到巴比伦的粘土板上的刻痕,再到中国古代的算盘,社会生产力的提高与当时所采用的计算工具密切相关。计算工具能力越强,就能大幅缩短人类解决复杂问题的时间,社会生产力水平自然就会越高。CPUCPU,全称CentralProcessingUnit,即中央处理器。现代电子计算机的发明是基于1940年代诞生的冯·诺依曼架构,这个架构主要由运算器、控制器、存储器、输入设备、输出设备等五个主要部分组成。特点:CPU具有通用性和灵活性,能够执行各种任务,如操作系统管理、软件运行和数据处理等。它擅长串行计算,即按照指定顺序执行任务。应用:广泛应用于个人电脑、服务器、移动设备等各种计

c++ - 在无模式对话框窗口打开时通过加速键

我们有一个非常大的内部MFC应用程序。它有一个带菜单栏的主窗口,以及显示在主窗口顶部的数百个独特的子窗口(没有菜单栏)(并非同时显示)。这些子窗口作为CDialog实现,但无模式运行(通过CreateWindow,而不是DoModal)。它们的父HWND设置为NULL。我们最近收到了一项功能请求——允许主窗口中的特定菜单栏加速器工作,即使其中一个子窗口是事件窗口也是如此。从用户的角度来看,这很有意义。这可以很容易地通过应用程序范围的键盘钩子(Hook)来伪造,观察确切的击键,但我想知道是否有更简洁的方法? 最佳答案 您也可以在主窗口

c++ - 计算以恒定加速度对齐两个 3D vector 所需的扭矩?

我目前正在为卫星游戏构建一个简化的react控制系统,并且需要一种方法来使用该系统将卫星对准世界空间坐标中的给定单位方向。因为这是一个游戏模拟,所以我伪造了系统,只是在物体震中周围施加扭矩力。这很困难,因为在我的例子中,扭矩的强度不能变化,它要么打开要么关闭。要么全力以赴,要么无力。计算需要施加扭矩的方向相对容易,但我很难让它完美对齐而不会失控并陷入逻辑循环。它需要在精确的“时间”施加反作用力,以零角速度降落在目标方向上。到目前为止我确定的是,我需要根据我当前的角速度和两个vector之间的角度计算达到零速度所需的“时间”。如果这超过了我达到零角的时间,那么它需要施加相反的扭矩。从理论